#ifndef BITENCODEDSOLUTION_H_
#define BITENCODEDSOLUTION_H_

#include "../Solution.h"
#include <vector>
using namespace std;

/**
 * This is a cool BitEncoded solution class!!!
 */
class BitEncodedSolution : public Solution 
{
    public:
        BitEncodedSolution();
        BitEncodedSolution(vector<bool>);                /**< Constructor that allows for prebuilt solution vector */
        virtual vector<bool> getSolution();              /**< Accessor for the solution                            */
        virtual void setSolution(vector<bool>);          /**< Setter for the solution                              */
        virtual unsigned int getSize();                  /**< Returns the size of the solution                     */
        virtual void setBit(unsigned int, bool);         /**< Sets the bit at the given index                      */
        virtual bool getBit(unsigned int);               /**< Returns the bit at the given index                   */
        virtual void addBit(bool);                       /**< Adds the given value to the end of the solution      */
        virtual void fillWithRandomBits(unsigned int);   /**< Generates a random solution of the given size        */
        virtual Solution* clone();                       /**< Returns a new object identical to the currrent object*/
        virtual void mutate();                           /**< Mutates the solution                                 */
        virtual ostream& outputSolution(ostream &);      /**< Outputs the solution in a readable format            */
        SolutionType getSerializationIdentifyer();       /**< Returns the serialization identifyer used by the solution factory */
        
    protected:
        vector<bool> solution;
};

#endif /*BITENCODEDSOLUTION_H_*/
